#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
} LNode, *LinkList;

LNode *GetElemByIndex(LinkList L, int i);
LNode *GetElemByValue(LinkList L, ElemType e);
int GetListLength(LinkList L);

int main() {}

// 按位查找
// 平均时间复杂度 O(n)
LNode *GetElemByIndex(LinkList L, int i)
{
    if (i < 0)
        return NULL;
    LNode *p = L;
    int j = 0;

    while (p != NULL && j < i)
    {
        p = p->next;
        j++;
    }

    return p;
};

// 按值查找
LNode *GetElemByValue(LinkList L, ElemType e)
{
    LNode *p = L->next; // 带头结点
    if (p == NULL)
        return NULL;

    while (p != NULL && p->data != e)
    {
        p = p->next;
    }

    return p;
}

// 求表长
// 时间复杂度 O(n)
int GetListLength(LinkList L)
{
    LNode *p = L;
    int len = 0;
    while (p->next != NULL) // 带头结点
    {
        p = p->next;
        len++;
    }

    return len;
}